#include<iostream>
#include<thread>
#include<mutex>
#include<condition_variable>
std::mutex mtx; //互斥锁
std::condition_variable cv;//条件变量
bool flag = false; //交替打印标志,false表示 a 线程, true标志 b线程
void threadA()
{   
    for(int i = 0; i < 10; i++)
    {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock,[](){return !flag;}); //等待线程A的回合
        std::cout<<"我是线程A"<<std::endl;
        flag = true; //切换到线程B回合
        cv.notify_one(); //通知线程B
    }
}
void threadB()
{
    for(int i = 0; i < 10; i++)
    {
        std::unique_lock<std::mutex> lock(mtx);
        cv.wait(lock,[](){return flag;}); //等待线程B的回合
        std::cout<<"我是线程B"<<std::endl;
        flag = false; //切换到线程A回合
        cv.notify_one(); //通知线程A
    }
}
int main()
{
    std::thread t1(threadA);
    std::thread t2(threadB);
    t1.join();
    t2.join();
    return 0;
}

